package com.cmc.cloud.cmclink.doc.vo.blnovo;

import com.cmc.cloud.cmclink.doc.entity.BlnoFreightDO;
import com.cmc.cloud.cmclink.doc.vo.blnocargovo.BlnoCargoUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnochargevo.BlnoLocalChargeUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnocntrvo.BlnoCntrUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnofreightvo.BlnoFreightUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnolocalcostvo.BlnoLocalCostUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnopaymentvo.BlnoPaymentUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoscnvo.BlnoScnUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnovslvoyvo.BlnoVslvoyUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.attachmentvo.AttachmentUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.operatelog.OperateLogRespVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.requirementsvo.RequirementsUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.vgm.VgmCreateReqVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author 周贤
 * @date 2025/7/28
 */
@Schema(description = "管理后台 - 提单主信息创建 Request VO")
@Data
@EqualsAndHashCode()
@AllArgsConstructor
@NoArgsConstructor
@ToString()
@Valid
public class BlnoInfoVO {

    @Schema(description = "提单主信息主表数据")
    @NotNull(message = "{BlnoInfoVO.blnoBasInfoVO.NotNull}")
    @Valid
    private BlnoBaseInfoVO blnoBasInfoVO;

    @Schema(description = "提单航线船期信息")
    @NotEmpty(message = "{BlnoInfoVO.blnoVslvoys.NotEmpty}")
    @Valid
    private List<BlnoVslvoyUpdateReqVO>  blnoVslvoys;

    @Schema(description = "提单指定支付方式信息")
    @Valid
    private List<BlnoPaymentUpdateReqVO> blnoPayments;

    @Schema(description = "订舱特殊要求")
    @Valid
    private List<RequirementsUpdateReqVO> reqVOList;

    @Schema(description = "提单附件信息")
    @Valid
    private List<AttachmentUpdateReqVO> attachmentReqVO;

    @Schema(description = "提单收发通信息")
    @Valid
    private List<BlnoScnUpdateReqVO> blnoScns;

    @Schema(description = "提单货物信息")
    @Valid
    private List<BlnoCargoUpdateReqVO> blnoCargos;

    @Schema(description = "提单箱信息")
    @Valid
    private List<BlnoCntrUpdateReqVO> blnoCntrs;

    @Schema(description = "提单海运费信息")
    private List<BlnoFreightUpdateReqVO> blnoFreights;

    @Schema(description = "提单本地收费信息")
    private List<BlnoLocalChargeUpdateReqVO> blnoCharges;

    @Schema(description = "提单本地支出信息")
    private List<BlnoLocalCostUpdateReqVO> blnoCosts;

    @Schema(description = "提单操作流程日志")
    private List<OperateLogRespVO> blnoOperationLogs;

    @Schema(description = "提单Vgm信息")
    private List<VgmCreateReqVO> vgmCreateReqVos;

    @Schema(description = "订舱号列表")
    private List<String> bookingNos;

}
